home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok24.lha / DME / SRC / source.zoo / cmd3.c < prev    next >
C/C++ Source or Header  |  1989-07-03  |  3KB  |  198 lines

  1.  
  2. /*
  3.  * CMD3.C
  4.  *
  5.  *    (C)Copyright 1988 by Matthew Dillon, All Rights Reserved
  6.  *
  7.  *  SETFONT
  8.  *  IGNORECASE
  9.  *  SET
  10.  *  SETENV
  11.  *  UNSET
  12.  *  UNSETENV
  13.  *  CD
  14.  */
  15.  
  16. #include "defs.h"
  17. #include <local/xmisc.h>
  18. #include <stdio.h>
  19.  
  20. #define nomemory()  { memoryfail = 1; }
  21.  
  22. extern FONT *GetFont();
  23.  
  24. /*
  25.  *  SETFONT font size
  26.  */
  27.  
  28. void
  29. do_setfont()
  30. {
  31.     register FONT *font = GetFont(av[1], atoi(av[2]));
  32.     register ED *ep = Ep;
  33.     if (font) {
  34.     if (ep->Font)
  35.         CloseFont(ep->Font);
  36.     ep->Font = font;
  37.     SetFont(ep->Win->RPort, font);
  38.     SetRast(ep->Win->RPort, 0);
  39.     RefreshWindowFrame(ep->Win);
  40.     set_window_params();
  41.     text_redisplay();
  42.     } else {
  43.     title("Unable to find font");
  44.     }
  45. }
  46.  
  47. do_ignorecase()
  48. {
  49.     register ED *ep = Ep;
  50.  
  51.     if (av[1][0]) {
  52.     switch(av[1][1] & 0x1F) {
  53.     case 'n'&0x1F:
  54.         ep->IgnoreCase = 1;
  55.         break;
  56.     case 'f'&0x1F:
  57.         ep->IgnoreCase = 0;
  58.         break;
  59.     case 'o'&0x1F:
  60.         ep->IgnoreCase = 1 - ep->IgnoreCase;
  61.         break;
  62.     }
  63.     if (ep->IgnoreCase)
  64.         title("Case InSensitive");
  65.     else
  66.         title("Case Sensitive");
  67.     }
  68. }
  69.  
  70. /*
  71.  *  av[1]
  72.  */
  73.  
  74. do_cd()
  75. {
  76.     long oldlock;
  77.     long lock;
  78.  
  79.     oldlock = CurrentDir(Ep->dirlock);
  80.     if (lock = Lock(av[1], SHARED_LOCK)) {
  81.     UnLock(CurrentDir(oldlock));
  82.     Ep->dirlock = lock;
  83.     } else {
  84.     CurrentDir(oldlock);
  85.     Abortcommand = 1;
  86.     title("Unable to CD");
  87.     }
  88. }
  89.  
  90. /*
  91.  *  VARIABLE SUPPORT!
  92.  */
  93.  
  94. #define VARS    struct _VARS
  95. VARS {
  96.     MNODE   Node;
  97.     char    *Name;
  98.     char    *Str;
  99. };
  100.  
  101. static MLIST SList = { (MNODE *)&SList.mlh_Tail, NULL, (MNODE *)&SList.mlh_Head };
  102.  
  103. void
  104. do_set()
  105. {
  106.     register VARS *v;
  107.  
  108.     do_unset();
  109.     if (v = malloc(sizeof(VARS))) {
  110.     if (v->Name = malloc(strlen(av[1])+1)) {
  111.         if (v->Str = malloc(strlen(av[2])+1)) {
  112.         AddHead(&SList, v);
  113.         strcpy(v->Name, av[1]);
  114.         strcpy(v->Str , av[2]);
  115.         return;
  116.         }
  117.         free(v->Name);
  118.     }
  119.     free(v);
  120.     }
  121.     nomemory();
  122. }
  123.  
  124. do_setenv()
  125. {
  126.     SetDEnv(av[1], av[2]);
  127. }
  128.  
  129. do_unset()
  130. {
  131.     register VARS *v;
  132.  
  133.     for (v = (VARS *)SList.mlh_Head; v->Node.mln_Succ; v = (VARS *)v->Node.mln_Succ) {
  134.     if (strcmp(v->Name, av[1]) == 0) {
  135.         Remove(v);
  136.         free(v);
  137.         free(v->Name);
  138.         free(v->Str);
  139.         break;
  140.     }
  141.     }
  142. }
  143.  
  144. do_unsetenv()
  145. {
  146.     register char *ptr = (char *)av[1];
  147.     register char *tmp = malloc(4+strlen(ptr)+1);
  148.  
  149.     if (tmp) {
  150.     strcpy(tmp, "ENV:");
  151.     strcat(tmp, ptr);
  152.     mountrequest(0);
  153.     DeleteFile(tmp);
  154.     mountrequest(1);
  155.     free(tmp);
  156.     }
  157. }
  158.  
  159. /*
  160.  *  Search (1) internal list, (2) enviroment, (3) macros.  The variable
  161.  *  is allocated with malloc().  NULL if not found.  ENV: need not exist.
  162.  */
  163.  
  164. char *
  165. getvar(find)
  166. char *find;
  167. {
  168.     register char *str = NULL;
  169.     {
  170.     register VARS *v;
  171.  
  172.     for (v = (VARS *)SList.mlh_Head; v->Node.mln_Succ; v = (VARS *)v->Node.mln_Succ) {
  173.         if (strcmp(v->Name, find) == 0) {
  174.         if (str = malloc(strlen(v->Str)+1)) {
  175.             strcpy(str, v->Str);
  176.             return(str);
  177.         }
  178.         }
  179.     }
  180.     }
  181.  
  182.     mountrequest(0);
  183.     str = GetDEnv(find);
  184.     mountrequest(1);
  185.     if (str)
  186.     return(str);
  187.  
  188.     if ((str = keyspectomacro(find)) || (str = menutomacro(find))) {
  189.     register char *ptr = malloc(strlen(str)+1);
  190.     if (ptr) {
  191.         strcpy(ptr, str);
  192.         return(ptr);
  193.     }
  194.     }
  195.     return(NULL);
  196. }
  197.  
  198.